-Added Redo menu option
[f432xdd.git] / java / Graph Editor / src / controllers / SelectionController.java
blob48ec36cc320d663fda20127a6a5ddac182f3f092
1 package controllers;
3 import interfaces.*;
5 import java.awt.event.KeyEvent;
6 import java.awt.event.KeyListener;
7 import java.awt.event.MouseEvent;
8 import java.awt.event.MouseListener;
9 import java.awt.event.MouseMotionListener;
11 import models.GraphModel;
12 import models.GraphVertex;
13 import javax.swing.*;
15 import controllers.actions.Rename;
17 import java.util.List;
18 import java.util.ArrayList;
21 public class SelectionController implements MouseListener,MouseMotionListener,KeyListener{
22 private GraphPanel object = null;
23 private GraphFrame frame;
24 private GraphVertex selectedObject = null;
25 private GraphModel model;
27 private String typedStr;
28 private String originalName;
29 private boolean isChangingName;
32 int relativeX = 0;
33 int relativeY = 0;
34 int clickX = 0;
35 int clickY = 0;
37 public SelectionController(GraphFrame frame, GraphModel model){
38 isChangingName = false;
39 this.frame = frame;
40 frame.setSelectionController(this);
41 frame.addKeyListener(this);
42 setObject(frame.getPanel());
44 setModel(model);
47 public GraphModel getModel() {
48 return model;
50 public void setSelected(GraphVertex o)
52 if(isChangingName){
53 this.doChangeName();
55 if(selectedObject != null){
56 selectedObject.setSelected(false);
58 if(o != null){
59 selectedObject = o;
60 o.setSelected(true);
63 public GraphVertex getSelectedVertex()
65 return selectedObject;
68 public void removeSelected()
70 selectedObject = null;
74 public void setObject(GraphPanel panel){
75 if(object != null){
76 object.removeMouseListener(this);
77 object.removeMouseMotionListener(this);
78 object.removeKeyListener(this);
80 object = panel;
81 object.addMouseListener(this);
82 object.addMouseMotionListener(this);
83 object.addKeyListener(this);
86 public void setModel(GraphModel model){
87 removeSelected();
88 this.model = model;
92 // Called when the typing stops, Either Return has been pressed or a
93 // other object has been selected.
94 private void doChangeName(){
95 selectedObject.setName(originalName);
96 this.frame.addAction(new Rename(typedStr,this));
97 this.isChangingName = false;
100 private void doCancelNameChange(){
101 selectedObject.setName(this.originalName);
102 isChangingName = false;
105 public void mouseClicked(MouseEvent arg0) {
106 if(arg0.getButton() == MouseEvent.BUTTON1){
107 if(arg0.getClickCount() == 2){
108 this.typedStr = "";
109 isChangingName = true;
110 originalName = selectedObject.getName();
111 System.out.println("DCLICK");
112 }else{
113 this.setSelected(model.getGraphByCoordinate(arg0.getX(), arg0.getY()));
118 public void mouseEntered(MouseEvent arg0) {
119 // TODO Auto-generated method stub
122 public void mouseExited(MouseEvent arg0) {
123 // TODO Auto-generated method stub
126 public void mousePressed(MouseEvent arg0) {
127 this.setSelected(model.getGraphByCoordinate(arg0.getX(), arg0.getY()));
129 clickX = arg0.getX();
130 clickY = arg0.getY();
133 public void mouseReleased(MouseEvent arg0) {
137 @Override
138 public void mouseDragged(MouseEvent arg0) {
139 if(selectedObject != null){
140 selectedObject.setX(selectedObject.getX() + (arg0.getX() - clickX));
141 selectedObject.setY(selectedObject.getY() + (arg0.getY() - clickY));
142 clickX = arg0.getX();
143 clickY = arg0.getY();
147 @Override
148 public void mouseMoved(MouseEvent arg0) {
151 @Override
152 public void keyPressed(KeyEvent arg0) {
153 if(this.isChangingName && selectedObject != null){
154 if(arg0.getKeyCode() == KeyEvent.VK_ENTER){
155 doChangeName();
156 }else if(arg0.getKeyCode() == KeyEvent.VK_ESCAPE){
157 doCancelNameChange();
158 }else if(arg0.getKeyCode()== KeyEvent.VK_BACK_SPACE){
159 this.typedStr = this.typedStr.substring(0,this.typedStr.length()-1);
160 selectedObject.setName(typedStr);
165 @Override
166 public void keyReleased(KeyEvent arg0) {
170 private boolean acceptKeyForName(char a){
171 String l = new String();
172 l += a;
173 String acceptKeys = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~!@#$%^&*()_+=-`[]{};'\":<>?,./\\| «①∞⁵‰‽fl○";
174 return acceptKeys.contains(l);
177 @Override
178 public void keyTyped(KeyEvent arg0) {
179 // Todo Fix VK_ENTER + VK_ESCAPE
180 if(this.isChangingName && selectedObject != null && !arg0.isActionKey()){
181 if(arg0.getKeyChar() != KeyEvent.CHAR_UNDEFINED && acceptKeyForName(arg0.getKeyChar())){
182 this.typedStr += arg0.getKeyChar();
183 System.out.println("Adding key");
184 selectedObject.setName(typedStr); //SetName for PREVIEW reasons!